A device driver is computer program code that is used by a computer to control a hardware device. A printer driver is a device driver for a printer. Printers of various types typically require customized printer drivers, but the drivers are designed to be generally compatible with a variety of applications that generate print jobs or perform printing tasks. Some printer drivers include a rendering component and a configuration component. The rendering component converts graphics objects into printer commands that instruct a printer to render an image of the content to be printed on a printable medium. The configuration component communicates with applications and enables users to control printer options.
In a typical mode of operation, printer drivers generate files that are sent to a print spooler, which assembles the files for later processing, typically in a “first-in, first-out” manner. Print spoolers allow printing tasks to be queued and performed when resources become available (also known as background printing), thereby allowing an application that caused a task to be spooled to continue operating without having to wait for the task to be completed.
Some printing devices are able to perform more than one function. For example, multi-function printers with a built-in scanner can perform printing and scanning tasks. However, the printing tasks and the scanning tasks are generally kept separate and are not related to each other.
Cards (e.g., plastic ID cards) are among the many types of printable media available today. Smart cards are devices that include computer-readable data encoded in storage (e.g., on-chip storage) on the card. Aside from the storage medium and other computing-related hardware, smart cards are typically made of plastic or some other material on which information can be printed (e.g., a cardholder's name, photograph, or other identifying information). The production of smart cards typically involves two separate processes: printing and encoding. The separate nature of these processes can add time and complexity to the production of smart cards. In a typical scenario, an application tasked with printing on the surface of the smart card communicates with a printer driver, which generates a file containing the content to be printed. After the smart card is printed, another application is used to encode data in storage on the printed smart card. In a network environment where printers and other resources are shared by several computers, this process can become even more complex.